﻿
#region Comment

/*
 * Project：    SpaceLibrary
 * 
 * FileName:    ECharts3.cs
 * CreatedOn:   2016-06-23
 * CreatedBy:   农夫有田
 * 
 * 
 * Description：
 *      ->      ECharts3主类
 *   
 * History：
 *      ->
 * 
 * Examples：
 *      ->      
 *          
 */

#endregion

namespace SpaceLibrary
{
    using System;
    using Newtonsoft.Json;
    using System.IO;
    using System.Diagnostics;

    public partial class ECharts3
    {
        #region StringWriter

        /// <summary>
        /// StringWriter
        /// </summary>
        public StringWriter sw = new StringWriter();

        /// <summary>
        /// JsonWriter
        /// </summary>
        public JsonWriter jw;

        #endregion

        #region 获得生成的json格式option内容

        /// <summary>
        /// 获得生成的json格式option内容
        /// </summary>
        public string OptionString
        {
            get
            {
                Generate();
                return sw.GetStringBuilder().ToString();
            }
        }

        #endregion

        #region 构造函数

        /// <summary>
        /// 构造函数
        /// </summary>
        public ECharts3()
        {
            jw = new JsonTextWriter(sw);
        }

        #endregion

        #region 生成option内容

        /// <summary>
        /// 生成option主类
        /// </summary>
        private void Generate()
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();

            jw.WriteStartObject();

            #region title
            jw.WritePropertyName("title");
            jw.WriteStartObject();
            if (title.show)
            {
                jw.WritePropertyName("show");
                jw.WriteValue(title.show);
            }
            jw.WritePropertyName("text");
            jw.WriteValue(title.text);
            if (title.subtext != string.Empty)
            {
                jw.WritePropertyName("subtext");
                jw.WriteValue(title.subtext);
            }
            if (title.left.ToString() != Params.align.auto)
            {
                jw.WritePropertyName("left");
                jw.WriteValue(title.left);
            }
            jw.WriteEndObject();
            #endregion
            #region legend
            jw.WritePropertyName("legend");
            jw.WriteStartObject();
            if (!legend.show)
            {
                jw.WritePropertyName("show");
                jw.WriteValue(legend.show);
            }
            jw.WritePropertyName("data");
            jw.WriteStartArray();
            if (legend.datalist.Count > 0)
            {
                foreach (_legend.dataList d in legend.datalist)
                {
                    jw.WriteStartObject();
                    jw.WritePropertyName("name");
                    jw.WriteValue(d.name);
                    if (d.icon != string.Empty)
                    {
                        jw.WritePropertyName("icon");
                        jw.WriteValue(d.icon);
                    }
                    if (d.textStyle.color != string.Empty)
                    {
                        jw.WritePropertyName("textStyle");
                        jw.WriteStartObject();
                        jw.WritePropertyName("color");
                        jw.WriteValue(d.textStyle.color);
                        jw.WriteEndObject();
                    }
                    jw.WriteEndObject();
                }
            }
            else
            {
                foreach (string d in legend.data)
                {
                    jw.WriteValue(d);
                }
            }
            jw.WriteEndArray();
            if (legend.left.ToString() != Params.align.auto)
            {
                jw.WritePropertyName("left");
                jw.WriteValue(legend.left);
            }
            jw.WriteEndObject();
            #endregion
            #region grid
            jw.WritePropertyName("grid");
            jw.WriteStartObject();
            if (grid.show)
            {
                jw.WritePropertyName("show");
                jw.WriteValue(grid.show);
            }
            if (grid.left.ToString() != Params.align.auto)
            {
                jw.WritePropertyName("left");
                jw.WriteValue(grid.left);
            }
            if (grid.top.ToString() != "60")
            {
                jw.WritePropertyName("top");
                jw.WriteValue(grid.top);
            }
            if (grid.right.ToString() != "10%")
            {
                jw.WritePropertyName("right");
                jw.WriteValue(grid.right);
            }
            if (grid.bottom.ToString() != "60")
            {
                jw.WritePropertyName("bottom");
                jw.WriteValue(grid.bottom);
            }
            if (grid.containLabel)
            {
                jw.WritePropertyName("containLabel");
                jw.WriteValue(grid.containLabel);
            }
            jw.WriteEndObject();
            #endregion
            #region toolbox
            if (toolbox.show)
            {
                jw.WritePropertyName("toolbox");
                jw.WriteStartObject();
                if (toolbox.orient != Params.orient.horizontal)
                {
                    jw.WritePropertyName("orient");
                    jw.WriteValue(toolbox.orient);
                }
                if (toolbox.itemSize != _toolbox._itemSizeDefult)
                {
                    jw.WritePropertyName("itemSize");
                    jw.WriteValue(toolbox.itemSize);
                }
                if (toolbox.itemGap != _toolbox._itemGapDefult)
                {
                    jw.WritePropertyName("itemGap");
                    jw.WriteValue(toolbox.itemGap);
                }
                if (!toolbox.showTitle)
                {
                    jw.WritePropertyName("showTitle");
                    jw.WriteValue(toolbox.showTitle);
                }
                jw.WritePropertyName("feature");
                jw.WriteStartObject();
                if (toolbox.feature.saveAsImage.show)
                {
                    jw.WritePropertyName("saveAsImage");
                    jw.WriteStartObject();
                    if (toolbox.feature.saveAsImage.type != Params.pictype.png)
                    {
                        jw.WritePropertyName("type");
                        jw.WriteValue(toolbox.feature.saveAsImage.type);
                    }
                    if (toolbox.feature.saveAsImage.name != string.Empty)
                    {
                        jw.WritePropertyName("name");
                        jw.WriteValue(toolbox.feature.saveAsImage.name);
                    }
                    if (toolbox.feature.saveAsImage.backgroundColor != string.Empty)
                    {
                        jw.WritePropertyName("backgroundColor");
                        jw.WriteValue(toolbox.feature.saveAsImage.backgroundColor);
                    }
                    jw.WriteEndObject();
                }
                jw.WriteEndObject();
                if (toolbox.left.ToString() != Params.align.auto)
                {
                    jw.WritePropertyName("left");
                    jw.WriteValue(toolbox.left);
                }
                if (toolbox.top.ToString() != Params.align.auto)
                {
                    jw.WritePropertyName("top");
                    jw.WriteValue(toolbox.top);
                }
                if (toolbox.right.ToString() != Params.align.auto)
                {
                    jw.WritePropertyName("right");
                    jw.WriteValue(toolbox.right);
                }
                if (toolbox.bottom.ToString() != Params.align.auto)
                {
                    jw.WritePropertyName("bottom");
                    jw.WriteValue(toolbox.bottom);
                }
                jw.WriteEndObject();
            }
            #endregion
            #region tooltip
            if (tooltip.show)
            {
                jw.WritePropertyName("tooltip");
                jw.WriteStartObject();
                if (!tooltip.showContent)
                {
                    jw.WritePropertyName("showContent");
                    jw.WriteValue(tooltip.showContent);
                }
                jw.WritePropertyName("trigger");
                jw.WriteValue(tooltip.trigger);
                if (tooltip.triggerOn != Params.triggerOn.mousemove)
                {
                    jw.WritePropertyName("triggerOn");
                    jw.WriteValue(tooltip.triggerOn);
                }
                jw.WriteEndObject();
            }
            #endregion
            #region xAxis
            jw.WritePropertyName("xAxis");
            jw.WriteStartArray();

            foreach (_xAxis xa in xAxis)
            {
                jw.WriteStartObject();

                if (xa.gridIndex > 0)
                {
                    jw.WritePropertyName("gridIndex");
                    jw.WriteValue(xa.gridIndex);
                }
                if (xa.position != Params.position.bottom)
                {
                    jw.WritePropertyName("position");
                    jw.WriteValue(xa.position);
                }
                if (xa.type != Params.AxisType.category)
                {
                    jw.WritePropertyName("type");
                    jw.WriteValue(xa.type);
                }
                if (xa.name != string.Empty)
                {
                    jw.WritePropertyName("name");
                    jw.WriteValue(xa.name);
                }
                if (xa.nameGap != _xAxis._nameGapDefault)
                {
                    jw.WritePropertyName("nameGap");
                    jw.WriteValue(xa.nameGap);
                }
                if (!xa.boundaryGap)
                {
                    jw.WritePropertyName("boundaryGap");
                    jw.WriteValue(xa.boundaryGap);
                }
                jw.WritePropertyName("data");
                jw.WriteStartArray();
                foreach (_xAxis.dataList d in xa.datalist)
                {
                    if (d.textStyle.left != Params.align.auto
                        || d.textStyle.color != string.Empty
                        || d.textStyle.fontStyle != Params.fontStyle.normal
                        || d.textStyle.fontWeight != Params.fontWeight.normal
                        || d.textStyle.fontFamily != _yAxis.dataList._textStyle._fontFamilyDefault
                        || d.textStyle.fontSize != _yAxis.dataList._textStyle._fontSizeDefault)
                    {
                        jw.WriteStartObject();
                        jw.WritePropertyName("value");
                        jw.WriteValue(d.value);
                        jw.WritePropertyName("textStyle");
                        jw.WriteStartObject();
                        if (d.textStyle.left != Params.align.auto)
                        {
                            jw.WritePropertyName("left");
                            jw.WriteValue(d.textStyle.left);
                        }
                        if (d.textStyle.color != string.Empty)
                        {
                            jw.WritePropertyName("color");
                            jw.WriteValue(d.textStyle.color);
                        }
                        if (d.textStyle.fontStyle != Params.fontStyle.normal)
                        {
                            jw.WritePropertyName("fontStyle");
                            jw.WriteValue(d.textStyle.fontStyle);
                        }
                        if (d.textStyle.fontWeight != Params.fontWeight.normal)
                        {
                            jw.WritePropertyName("fontWeight");
                            jw.WriteValue(d.textStyle.fontWeight);
                        }
                        if (d.textStyle.fontFamily != _xAxis.dataList._textStyle._fontFamilyDefault)
                        {
                            jw.WritePropertyName("fontFamily");
                            jw.WriteValue(d.textStyle.fontFamily);
                        }
                        if (d.textStyle.fontSize != _xAxis.dataList._textStyle._fontSizeDefault)
                        {
                            jw.WritePropertyName("fontSize");
                            jw.WriteValue(d.textStyle.fontSize);
                        }
                        jw.WriteEndObject();
                        jw.WriteEndObject();
                    }
                    else
                    {
                        jw.WriteValue(d.value);
                    }
                }
                jw.WriteEndArray();
                jw.WriteEndObject();
            }

            jw.WriteEndArray();
            #endregion
            #region yAxis
            jw.WritePropertyName("yAxis");
            jw.WriteStartArray();
            if (yAxis.Count == 0)
            {
                jw.WriteStartObject();
                jw.WritePropertyName("type");
                jw.WriteValue(Params.AxisType.value);
                jw.WriteEndObject();
            }
            else
            {
                foreach (_yAxis ya in yAxis)
                {
                    jw.WriteStartObject();
                    if (ya.gridIndex > 0)
                    {
                        jw.WritePropertyName("gridIndex");
                        jw.WriteValue(ya.gridIndex);
                    }
                    if (ya.position != Params.position.left)
                    {
                        jw.WritePropertyName("position");
                        jw.WriteValue(ya.position);
                    }
                    //if (ya.type != Params.AxisType.value)
                    //{
                    jw.WritePropertyName("type");
                    jw.WriteValue(ya.type);
                    //}
                    if (ya.name != string.Empty)
                    {
                        jw.WritePropertyName("name");
                        jw.WriteValue(ya.name);
                    }
                    if (ya.nameGap != _yAxis._nameGapDefault)
                    {
                        jw.WritePropertyName("nameGap");
                        jw.WriteValue(ya.nameGap);
                    }
                    if (!ya.boundaryGap)
                    {
                        jw.WritePropertyName("boundaryGap");
                        jw.WriteValue(ya.boundaryGap);
                    }
                    if (ya.datalist.Count > 0)
                    {

                        jw.WritePropertyName("data");
                        jw.WriteStartArray();
                        foreach (_yAxis.dataList d in ya.datalist)
                        {
                            if (d.textStyle.left != Params.align.auto
                                || d.textStyle.color != string.Empty
                                || d.textStyle.fontStyle != Params.fontStyle.normal
                                || d.textStyle.fontWeight != Params.fontWeight.normal
                                || d.textStyle.fontFamily != _yAxis.dataList._textStyle._fontFamilyDefault
                                || d.textStyle.fontSize != _yAxis.dataList._textStyle._fontSizeDefault)
                            {
                                jw.WriteStartObject();
                                jw.WritePropertyName("value");
                                jw.WriteValue(d.value);
                                jw.WritePropertyName("textStyle");
                                jw.WriteStartObject();
                                if (d.textStyle.left != Params.align.auto)
                                {
                                    jw.WritePropertyName("left");
                                    jw.WriteValue(d.textStyle.left);
                                }
                                if (d.textStyle.color != string.Empty)
                                {
                                    jw.WritePropertyName("color");
                                    jw.WriteValue(d.textStyle.color);
                                }
                                if (d.textStyle.fontStyle != Params.fontStyle.normal)
                                {
                                    jw.WritePropertyName("fontStyle");
                                    jw.WriteValue(d.textStyle.fontStyle);
                                }
                                if (d.textStyle.fontWeight != Params.fontWeight.normal)
                                {
                                    jw.WritePropertyName("fontWeight");
                                    jw.WriteValue(d.textStyle.fontWeight);
                                }
                                if (d.textStyle.fontFamily != _yAxis.dataList._textStyle._fontFamilyDefault)
                                {
                                    jw.WritePropertyName("fontFamily");
                                    jw.WriteValue(d.textStyle.fontFamily);
                                }
                                if (d.textStyle.fontSize != _yAxis.dataList._textStyle._fontSizeDefault)
                                {
                                    jw.WritePropertyName("fontSize");
                                    jw.WriteValue(d.textStyle.fontSize);
                                }
                                jw.WriteEndObject();
                                jw.WriteEndObject();
                            }
                            else
                            {
                                jw.WriteValue(d.value);
                            }
                        }
                        jw.WriteEndArray();
                    }
                    jw.WriteEndObject();
                }
            }
            jw.WriteEndArray();
            #endregion
            #region series
            jw.WritePropertyName("series");
            jw.WriteStartArray();

            foreach (_series se in series)
            {
                jw.WriteStartObject();
                jw.WritePropertyName("type");
                jw.WriteValue(se.seriestype);
                if (se.name != string.Empty)
                {
                    jw.WritePropertyName("name");
                    jw.WriteValue(se.name);
                }
                #region itemStyle
                if (se.itemStyle.normal.color != string.Empty
                    || se.itemStyle.normal.borderColor != string.Empty
                    || se.itemStyle.normal.borderWidth != 0
                    || se.itemStyle.normal.borderType != string.Empty
                    || se.itemStyle.normal.shadowBlur != 0
                    || se.itemStyle.normal.shadowColor != string.Empty
                    || se.itemStyle.normal.shadowOffsetX != 0
                    || se.itemStyle.normal.shadowOffsetY != 0
                    || se.itemStyle.normal.opacity != 1
                    //emphasis
                    || se.itemStyle.emphasis.color != string.Empty
                    || se.itemStyle.emphasis.borderColor != string.Empty
                    || se.itemStyle.emphasis.borderWidth != 0
                    || se.itemStyle.emphasis.borderType != string.Empty
                    || se.itemStyle.emphasis.shadowBlur != 0
                    || se.itemStyle.emphasis.shadowColor != string.Empty
                    || se.itemStyle.emphasis.shadowOffsetX != 0
                    || se.itemStyle.emphasis.shadowOffsetY != 0
                    || se.itemStyle.emphasis.opacity != 1)
                {
                    jw.WritePropertyName("itemStyle");
                    jw.WriteStartObject();
                    #region normal
                    if (se.itemStyle.normal.color != string.Empty
                        || se.itemStyle.normal.borderColor != string.Empty
                        || se.itemStyle.normal.borderWidth != 0
                        || se.itemStyle.normal.borderType != string.Empty
                        || se.itemStyle.normal.shadowBlur != 0
                        || se.itemStyle.normal.shadowColor != string.Empty
                        || se.itemStyle.normal.shadowOffsetX != 0
                        || se.itemStyle.normal.shadowOffsetY != 0
                        || se.itemStyle.normal.opacity != 1)
                    {
                        jw.WritePropertyName("normal");
                        jw.WriteStartObject();
                        if (se.itemStyle.normal.color != string.Empty)
                        {
                            jw.WritePropertyName("color");
                            jw.WriteValue(se.itemStyle.normal.color);
                        }
                        if (se.itemStyle.normal.borderColor != string.Empty)
                        {
                            jw.WritePropertyName("borderColor");
                            jw.WriteValue(se.itemStyle.normal.borderColor);
                        }
                        if (se.itemStyle.normal.borderWidth != 0)
                        {
                            jw.WritePropertyName("borderWidth");
                            jw.WriteValue(se.itemStyle.normal.borderWidth);
                        }
                        if (se.itemStyle.normal.borderType != string.Empty)
                        {
                            jw.WritePropertyName("borderType");
                            jw.WriteValue(se.itemStyle.normal.borderType);
                        }
                        if (se.itemStyle.normal.shadowBlur != 0)
                        {
                            jw.WritePropertyName("shadowBlur");
                            jw.WriteValue(se.itemStyle.normal.shadowBlur);
                        }
                        if (se.itemStyle.normal.shadowColor != string.Empty)
                        {
                            jw.WritePropertyName("shadowColor");
                            jw.WriteValue(se.itemStyle.normal.shadowColor);
                        }
                        if (se.itemStyle.normal.shadowOffsetX != 0)
                        {
                            jw.WritePropertyName("shadowOffsetX");
                            jw.WriteValue(se.itemStyle.normal.shadowOffsetX);
                        }
                        if (se.itemStyle.normal.shadowOffsetY != 0)
                        {
                            jw.WritePropertyName("shadowOffsetY");
                            jw.WriteValue(se.itemStyle.normal.shadowOffsetY);
                        }
                        if (se.itemStyle.normal.opacity != 1)
                        {
                            jw.WritePropertyName("opacity");
                            jw.WriteValue(se.itemStyle.normal.opacity);
                        }
                        jw.WriteEndObject();
                    }
                    #endregion
                    #region emphasis
                    if (se.itemStyle.emphasis.color != string.Empty
                        || se.itemStyle.emphasis.borderColor != string.Empty
                        || se.itemStyle.emphasis.borderWidth != 0
                        || se.itemStyle.emphasis.borderType != string.Empty
                        || se.itemStyle.emphasis.shadowBlur != 0
                        || se.itemStyle.emphasis.shadowColor != string.Empty
                        || se.itemStyle.emphasis.shadowOffsetX != 0
                        || se.itemStyle.emphasis.shadowOffsetY != 0
                        || se.itemStyle.emphasis.opacity != 1)
                    {
                        jw.WritePropertyName("emphasis");
                        jw.WriteStartObject();
                        if (se.itemStyle.emphasis.color != string.Empty)
                        {
                            jw.WritePropertyName("color");
                            jw.WriteValue(se.itemStyle.emphasis.color);
                        }
                        if (se.itemStyle.emphasis.borderColor != string.Empty)
                        {
                            jw.WritePropertyName("borderColor");
                            jw.WriteValue(se.itemStyle.emphasis.borderColor);
                        }
                        if (se.itemStyle.emphasis.borderWidth != 0)
                        {
                            jw.WritePropertyName("borderWidth");
                            jw.WriteValue(se.itemStyle.emphasis.borderWidth);
                        }
                        if (se.itemStyle.emphasis.borderType != string.Empty)
                        {
                            jw.WritePropertyName("borderType");
                            jw.WriteValue(se.itemStyle.emphasis.borderType);
                        }
                        if (se.itemStyle.emphasis.shadowBlur != 0)
                        {
                            jw.WritePropertyName("shadowBlur");
                            jw.WriteValue(se.itemStyle.emphasis.shadowBlur);
                        }
                        if (se.itemStyle.emphasis.shadowColor != string.Empty)
                        {
                            jw.WritePropertyName("shadowColor");
                            jw.WriteValue(se.itemStyle.emphasis.shadowColor);
                        }
                        if (se.itemStyle.emphasis.shadowOffsetX != 0)
                        {
                            jw.WritePropertyName("shadowOffsetX");
                            jw.WriteValue(se.itemStyle.emphasis.shadowOffsetX);
                        }
                        if (se.itemStyle.emphasis.shadowOffsetY != 0)
                        {
                            jw.WritePropertyName("shadowOffsetY");
                            jw.WriteValue(se.itemStyle.emphasis.shadowOffsetY);
                        }
                        if (se.itemStyle.emphasis.opacity != 1)
                        {
                            jw.WritePropertyName("opacity");
                            jw.WriteValue(se.itemStyle.emphasis.opacity);
                        }
                        jw.WriteEndObject();
                    }
                    #endregion
                    jw.WriteEndObject();
                }
                #endregion
                #region lineStyle
                if (se.lineStyle.normal.color != string.Empty
                    || se.lineStyle.normal.width != 0
                    || se.lineStyle.normal.type != string.Empty
                    || se.lineStyle.normal.shadowBlur != 0
                    || se.lineStyle.normal.shadowColor != string.Empty
                    || se.lineStyle.normal.shadowOffsetX != 0
                    || se.lineStyle.normal.shadowOffsetY != 0
                    || se.lineStyle.normal.opacity != 1)
                {
                    jw.WritePropertyName("lineStyle");
                    jw.WriteStartObject();
                    #region normal
                    if (se.lineStyle.normal.color != string.Empty
                        || se.lineStyle.normal.width != 0
                        || se.lineStyle.normal.type != string.Empty
                        || se.lineStyle.normal.shadowBlur != 0
                        || se.lineStyle.normal.shadowColor != string.Empty
                        || se.lineStyle.normal.shadowOffsetX != 0
                        || se.lineStyle.normal.shadowOffsetY != 0
                        || se.lineStyle.normal.opacity != 1)
                    {
                        jw.WritePropertyName("normal");
                        jw.WriteStartObject();
                        if (se.lineStyle.normal.color != string.Empty)
                        {
                            jw.WritePropertyName("color");
                            jw.WriteValue(se.lineStyle.normal.color);
                        }
                        if (se.lineStyle.normal.width != 0)
                        {
                            jw.WritePropertyName("width");
                            jw.WriteValue(se.lineStyle.normal.width);
                        }
                        if (se.lineStyle.normal.type != string.Empty)
                        {
                            jw.WritePropertyName("type");
                            jw.WriteValue(se.lineStyle.normal.type);
                        }
                        if (se.lineStyle.normal.shadowBlur != 0)
                        {
                            jw.WritePropertyName("shadowBlur");
                            jw.WriteValue(se.lineStyle.normal.shadowBlur);
                        }
                        if (se.lineStyle.normal.shadowColor != string.Empty)
                        {
                            jw.WritePropertyName("shadowColor");
                            jw.WriteValue(se.lineStyle.normal.shadowColor);
                        }
                        if (se.lineStyle.normal.shadowOffsetX != 0)
                        {
                            jw.WritePropertyName("shadowOffsetX");
                            jw.WriteValue(se.lineStyle.normal.shadowOffsetX);
                        }
                        if (se.lineStyle.normal.shadowOffsetY != 0)
                        {
                            jw.WritePropertyName("shadowOffsetY");
                            jw.WriteValue(se.lineStyle.normal.shadowOffsetY);
                        }
                        if (se.lineStyle.normal.opacity != 1)
                        {
                            jw.WritePropertyName("opacity");
                            jw.WriteValue(se.lineStyle.normal.opacity);
                        }
                        jw.WriteEndObject();
                    }
                    #endregion
                    jw.WriteEndObject();
                }
                #endregion
                #region datalist
                if (se.datalist.Count > 0)
                {
                    jw.WritePropertyName("data");
                    jw.WriteStartArray();
                    foreach (_series.dataList d in se.datalist)
                    {
                        if (d.name != string.Empty)
                        {
                            jw.WriteStartObject();
                            jw.WritePropertyName("name");
                            jw.WriteValue(d.name);
                            jw.WritePropertyName("value");
                            jw.WriteValue(d.value);

                            jw.WriteEndObject();
                        }
                        else
                        {
                            jw.WriteValue(d.value);
                        }
                    }
                    jw.WriteEndArray();
                }
                #endregion
                jw.WriteEndObject();
            }

            jw.WriteEndArray();
            #endregion
            #region other
            //System.Threading.Thread.Sleep(1);

            sw.Stop();

            jw.WritePropertyName("other");
            jw.WriteStartObject();
            jw.WritePropertyName("GenerTime");
            jw.WriteValue(string.Format("{0} ms", sw.ElapsedMilliseconds));
            jw.WriteEndObject();

            #endregion

            jw.WriteEndObject();

            jw.Flush();
        }

        #endregion

    }
}
